package cn.im;

import cn.im.cglibproxy.CglibProxyFactory;
import cn.im.jdkproxy.JdkProxyFactory;
import cn.im.service.SmsService;
import cn.im.service.impl.SmsServiceImpl;

public class Demo {

    public static void main(String[] args) {
        /**
         * jdk动态代理
         * 定义一个接口及其实现类；
         * 自定义 InvocationHandler 并重写invoke方法，在 invoke 方法中我们会调用原生方法（被代理类的方法）并自定义一些处理逻辑；
         * 通过 Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) 方法创建代理对象；
         */
        SmsService smsService = (SmsService) JdkProxyFactory.getProxy(new SmsServiceImpl());
        smsService.send("hello world.");


        /**
         * CGLIB动态代理（需要增加依赖，见pom文件）
         * 定义一个类；
         * 自定义 MethodInterceptor 并重写 intercept 方法，intercept 用于拦截增强被代理类的方法，和 JDK 动态代理中的 invoke 方法类似；
         * 通过 Enhancer 类的 create()创建代理类；
         */
        SmsService proxy = (SmsService)CglibProxyFactory.getProxy(SmsServiceImpl.class);
        proxy.send("hello world.");

    }
}
